#ifndef  __GPIO_H__
#define  __GPIO_H__

#include "imx6ull.h"

// 1. 定义引脚方向为输入或者输出
typedef enum
{
    input=0U,
    output=1U,
}GPIO_Direction;

// 2. 根据GPIOx_ICR1/GPIOx_ICR2枚举中断的触发方式
typedef enum
{
    GPIO_INT_LOW_LEVEL=0U,
    GPIO_INT_HIGH_LEVEL,
    GPIO_INT_RISING_EDGE,
    GPIO_INT_FALLING_EDGE
}GPIO_INT_Mode;

// 3. 若为输出引脚,需要填写一个默认的电平值
typedef struct
{
    GPIO_Direction direction;
    int level;          //输出引脚默认逻辑电平
    GPIO_INT_Mode IRQMode; // 中断的触发方式
}GPIO_Config;

// GPIO引脚初始化
void GPIO_Init(GPIO_Type* GPIOx,int GPIO_Pin_y,GPIO_Config* GPIO_InitStruct);

// 向输出引脚写入具体数值
void GPIO_Write(GPIO_Type* GPIOx,int GPIO_Pin_y,int value);

// 读取输入数据寄存器中的值
int GPIO_Read(GPIO_Type* GPIOx,int GPIO_Pin_y);

// 配置GPIO引脚中断使能
void GPIO_EnableIRQ(GPIO_Type* GPIOx, int GPIO_Pin_y);

//禁止GPIO引脚中断功能
void GPIO_DisableIRQ(GPIO_Type *GPIOx, int GPIO_Pin_y);

//清除中断状态
void GPIO_ClearIRQFlag(GPIO_Type *GPIOx, int GPIO_Pin_y);

//配置引脚的中断触发方式
void GPIO_InterruptModeConfig(GPIO_Type *GPIOx, int GPIO_Pin_y, int mode);

#endif 